package com.winit.utils;


import com.google.common.collect.Lists;

import java.lang.reflect.Method;
import java.util.ArrayList;

public class UpdateOld2New {

    public static <T> T updateOld2New(T db, T page) {
        T t = null;
        if (!db.getClass().equals(page.getClass())) {
            return t;
        }
        //获取从前端传来对象的get方法
        Method[] pageMethods = page.getClass().getMethods();
        ArrayList<Method> gets = Lists.newArrayList();
        for (Method method : pageMethods) {
            if (method.getName().startsWith("get")) {
                gets.add(method);
            }
        }
        //获取后端对象的set方法
        Method[] dbMethods = db.getClass().getMethods();
        ArrayList<Method> sets = Lists.newArrayList();
        for (Method method : dbMethods) {
            if (method.getName().startsWith("set")) {
                sets.add(method);
            }
        }

        //前端与后端对象之间的数据填充
        for (int i = 0; i < sets.size(); i++) {
            //截取字符串 获取相应方法上的字段
            String filed = sets.get(i).getName().substring(3).toLowerCase();
            for (int j = 0; j < gets.size(); j++) {
                String attribute = gets.get(j).getName().substring(3).toLowerCase();
                if (attribute.equals(filed)) {
                    try {
                        Object invoke = gets.get(j).invoke(page);
                        if (!(invoke == null || "".equals(invoke))) {
                            sets.get(i).invoke(db, invoke);
                            continue;
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return db;
    }
}
